package net.hn.hnms.biz.support.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.hn.hnms.biz.support.domain.dto.PointDto;
import net.hn.hnms.biz.support.domain.dto.QueryHisDto;
import net.hn.hnms.biz.support.domain.dto.QueryNowDto;
import net.hn.hnms.biz.support.domain.vo.AbscissPointHistoryListVo;
import net.hn.hnms.biz.support.domain.vo.AbscissQueryVo;
import net.hn.hnms.biz.support.domain.vo.ChartDateVo;
import net.hn.hnms.biz.support.service.RoofService;
import net.hn.hnms.sys.common.core.domain.R;
import net.hn.hnms.sys.common.core.domain.ResponsePage;
import net.hn.hnms.sys.common.mybatis.core.page.PageQuery;
import net.hn.hnms.sys.common.satoken.config.AutoSetMineCode;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 数据查询-顶板离层
 */
@Api(value = "数据查询-顶板离层", tags = {"数据查询-顶板离层"})
@RestController
@RequestMapping("absciss")
public class AbscissController {
    //cjdy
    @Resource
    private RoofService roofService;


    /**
     * * 分页条件查询实时数据
     * @param pageQuery
     * @param queryNowDto
     * @return
     */
    @ApiOperation("分页条件查询实时数据")
    @GetMapping("abscissPageNowList/pageList")
    @AutoSetMineCode
    public R<ResponsePage<AbscissQueryVo>> abscissPageNowList(PageQuery pageQuery, QueryNowDto queryNowDto) {
        if (pageQuery.getPageNum() != null) {
            pageQuery.setPageNum(pageQuery.getPageNum() + 1);
        }
        ResponsePage<AbscissQueryVo> list = roofService.abscissPageNowList(pageQuery, queryNowDto);
        return R.ok(list);
    }
    /**
     * * 分页条件查询历史数据
     * @param pageQuery
     * @param queryHisDto
     * @return
     */
    @ApiOperation("分页条件查询历史数据")
    @GetMapping("abscissPageHisList/pageList")
    @AutoSetMineCode
    public R<ResponsePage<AbscissQueryVo>> abscissPageHisList(PageQuery pageQuery, QueryHisDto queryHisDto) {
        if (pageQuery.getPageNum() != null) {
            pageQuery.setPageNum(pageQuery.getPageNum() + 1);
        }
        if (queryHisDto.getEndTime() == null) {
            //如果没有结束时间,则默认当前时间
            queryHisDto.setEndTime(new Date());
        }
        if (queryHisDto.getStartTime() == null) {
//            如果没有开始时间,则默认以当前时间前推六个小时
            LocalDateTime localDateTime = LocalDateTime.now().minusHours(6);
            Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
            queryHisDto.setStartTime(date);
        }
        if (queryHisDto.getStartTime().after(queryHisDto.getEndTime())) {
             return R.fail("结束时间不能大于开始时间");
        }
        ResponsePage<AbscissQueryVo> list = roofService.abscissPageHisList(pageQuery, queryHisDto);
        return R.ok(list);
    }
    @ApiOperation("条件查询顶板离层历史数据测点曲线")
    @GetMapping("abscissPointHistoryCurve")
    @AutoSetMineCode
    public R<ChartDateVo> pointHistoryCurve(PointDto pointDto) {
        //开始时间  若为空默认为前6小时的日期 >=data_time
        if (pointDto.getStartTime() == null) {
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date());
            //日期减6小时
            instance.add(Calendar.HOUR_OF_DAY, -6);
            pointDto.setStartTime(instance.getTime());
        }
        if  (pointDto.getEndTime() == null) {
            pointDto.setEndTime(new Date());
        }
        if (pointDto.getStartTime().after(pointDto.getEndTime())) {
            return R.fail("结束时间不能大于开始时间");
        }
//        if (pointDto.getEndTime().getTime() - pointDto.getStartTime().getTime() > (3600 * 24 * 31 * 1000L)) {
//            //1月得数据
//            return R.fail("请选择1月内时间范围");
//        }
        ChartDateVo chartDateVo= roofService.abscissPointHistoryCurve(pointDto);
        return R.ok(chartDateVo);
    }
    @ApiOperation("条件查询顶板离层历史数据测点列表")
    @GetMapping("abscissPointHistoryList")
    @AutoSetMineCode
    public R<List<AbscissPointHistoryListVo>> pointHistoryList(PointDto pointDto) {
        //开始时间  若为空默认为前6小时的日期 >=data_time
        if (pointDto.getStartTime() == null) {
            Calendar instance = Calendar.getInstance();
            instance.setTime(new Date());
            //日期减6小时
            instance.add(Calendar.HOUR_OF_DAY, -6);
            pointDto.setStartTime(instance.getTime());
        }
        if  (pointDto.getEndTime() == null) {
            pointDto.setEndTime(new Date());
        }
        if (pointDto.getStartTime().after(pointDto.getEndTime())) {
            return R.fail("结束时间不能大于开始时间");
        }
//        if (pointDto.getEndTime().getTime() - pointDto.getStartTime().getTime() > (3600 * 24 * 31 * 1000L)) {
//            //1月得数据
//            return R.fail("请选择1月内时间范围");
//        }
        List<AbscissPointHistoryListVo> list= roofService.abscissPointHistoryList(pointDto);
        return R.ok(list);
    }
}
